;Fix for Dragon Spirit: The New Legend (with CRAZY CLUB KEY) + DOSBox 0.72
;This fix emulates IRQ6 (INT 0E) when game calls INT 13, Fn 0

;Программа позволяет запустить игру Dragon Spirit: The New Legend (with CRAZY CLUB KEY) под DOSBox 0.72
;Для запуска игры требуется эмулировать возникновение аппаратного прерывания (IRQ 6)
;после вызова игрой (защитой игры) программного прерывания INT 13 (функции 0).
 
;
;При разработке использовались примеры кода с сайта http://www.Kalashnikoff.ru

; --- Ассемблирование ---
;При использовании TASM:
;TASM.EXE drgnsprt.asm
;TLINK.EXE drgnsprt.obj /t/x

;______________________________________________________


cseg segment
assume cs:cseg, ds:cseg, ss:cseg, es:cseg
org 100h

Begin:
 jmp Init ; на метку инициализации

; === Обработчик 13h-ого прерывания ===
Int_13h_proc proc
 cmp ah,0
 jne realInt13
 
 int 0Eh

realInt13:
db 0EAh  ; jmp far ptr
oldOffset:
dw 0h
oldSegment:
dw 0h


Int_13h_proc endp

; === Инициализация (подготовка и настройка резидента) ===
Init:
 mov ah,9
 mov dx,offset Copyright
 int 21h

 mov ax,3D00h ;проверим, DOSBox ли это
 mov dx, offset imgmount  ; попыткой открыть файл z:\imgmount.com
 int 21h
 jc noDOSBoxDetected

 mov bx, ax
 mov ax,3E00h ; закрыть файл
 int 21h

 mov ax,3513h
 int 21h ;получим и сохраним адрес (вектор) 13h прерывания
 mov word ptr oldOffset,bx
 mov word ptr oldSegment,es

 mov ax,2513h
 mov dx,offset Int_13h_proc
 int 21h

 mov ah,9
 mov dx, offset Installed
 int 21h

 mov dx,offset Init
 int 27h;оставим программу резидентной в памяти.

noDOSBoxDetected:
 mov ah,9
 mov dx, offset NeedDosbox
 int 21h

 int 20h

Copyright db 'Fix for Dragon Spirit: The New Legend (with CRAZY CLUB KEY) + DOSBox 0.72',0Ah,0Dh
 db 'fix created by oFF_rus (off_mail@mail.ru) for http://old-games.ru, 16/04/2009',0Ah,0Dh,0Ah,'$'
imgmount db 'z:\imgmount.com',0
NeedDosbox db 'DOSBox 0.72 not detected (can''t open z:\imgmount.com)',0Ah, 0Dh,'$'
Installed db 'Fix activated, run the game (play.bat)',0Ah, 0Dh,'$'

cseg ends
end Begin
